25 DRF 框架入门介绍

514次阅读
没有评论

共计 4407 个字符,预计需要花费 12 分钟才能阅读完成。

引入

1. 什么是 RESTful

  • REST 与技术无关,它是一种 软件架构风格 ,REST 是 Representational State Transfer 的简称,中文翻译为“ 表征状态转移
  • REST 从 资源的角度 类审视整个网络,它将分布在网络中某个节点的 资源通过 URL 进行标识 ,客户端应用 通过 URL 来获取资源 的表征,获得这些表征致使这些应用转变状态

  • 所有的数据,不管是通过网络获取的还是操作 (增删改查) 的数据,都是资源,将一切数据视为资源 是 REST 区别与其他架构风格的最本质属性

  • 对于 REST 这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

一.Web 应用两种开发模式

1. 前后端不分离模式

  • 也叫前后端混合开发模式, 需要后端写模板语言(dtl), 返回的是 HTML 页面
  • 浏览器 : 请求动态页面
  • 后端 : 返回 HTML

25 DRF 框架入门介绍

  • 优点

可以直接渲染页面, 方便处理请求数据

  • 缺点

耦合度非常高, 不方便扩展

2. 前后端分离模式

  • 前端 : 只写前端
  • 后端 : 只专注于写后端接口, 返回 json, xml 格式数据

  • 流程 :

浏览器到静态文件服务器请求静态页面, 静态服务器返回静态页面

JS 请求达到后端, 后端再返回 JSON 或 XML 格式的数据

25 DRF 框架入门介绍

  • 优点
  • 不需要管前端怎么实现, 后端开发者需要做的就是写接口

  • 只需要知道, 你前端传过来什么, 然后需要后端这边传回去什么就行了

  • 主要的就是操作逻辑, 解耦合性高
  • 缺点
  • 程序员不知道前端的具体流程, 然后对表的设计, 对业务或许就理解的没有那么透彻

  • 还存在前后端联调各种问题, 前端和后端的沟通等

二.API 接口和 RESTful API 规范

1.API 接口

  • 规定了前后端信息交互规则的 url 连接, 也就是前后端交互的媒介

2. 为什么使用这个规范

  • 为了在团队内部形成共识、防止个人习惯差异引起的混乱
  • 我们需要找到一种大家都觉得很好的接口实现规范, 用途一目了然,减少双方之间的合作成本

3. 接口文档

  • 书写接口的用途和使用方法, 数据格式等
  • 可以手动书写, 或者使用工具自动生成(coreapi,swagger)

4.RESTful API 规范

一共有十条, 规定这么做, 但公司可以根据自己的需求改变

  • 1.数据的安全保障, 通常使用 https 进行传输
# http 协议 + ssl 证书
# 使用 https 协议进行传输可以提高数据交互过程中的安全性
# 就算传输过程中被截获也需要 公钥 - 私钥 匹配才能得到数据
  • 2.接口特征表现 : 域名中有 api 标识
# 尽量将 API 部署在专用域名, 看到 api 字眼, 就代表该请求 url 链接是完成前后台数据交互的
    https://api.example.com 
    https://127.0.0.0:8080/api/ 
  • 3.多版本 : 请求地址中带版本, 或者在请求头中
# v1,v2 代表不同版本
    https://127.0.0.0:8080/api/v1/
    https://127.0.0.0:8080/api/v2/
  • 4.数据即资源, 均使用名词表示 (可以复数尽量不要用动词)
# 使用名词, 可以使用复数
    https://api.example.com/v1/books/

# 不符合规范
    https://api.example.com/v1/get_all_books
  • 5.通过请求方式的不同来执行不同的操作
get : 获取数据
post : 新增数据
put : 全部更新
patch : 局部更新 (基本上都使用 put)
delete : 删除

# 示例 : 
    https://api.baidu.com/books   - get 请求:获取所有书
    https://api.baidu.com/books/1 - get 请求:获取主键为 1 的书
    https://api.baidu.com/books   - post 请求:新增一本书
    https://api.baidu.com/books/1 - put 请求:整体修改主键为 1 的书
    https://api.baidu.com/books/1 - patch 请求:局部修改主键为 1 的书
    https://api.baidu.com/books/1 - delete 请求:删除主键为 1 的书
  • 6.请求路径中带过滤, 在 url 后面带参数
https://api.example.com/v1/?name='金'&order=asc
https://api.example.com/v1/name?sortby=name&order=asc
  • 7.返回数据中携带响应状态码
# 返回的 json 格式中放状态码, 标志当前请求成功或失败
    2XX : 正常响应
    3XX : 重定向响应
    4XX : 客户端异常
    5XX : 服务端异常
  • 8.返回数据中携带错误信息
# 错误处理, error 当做 key, 错误信息当做 value
    {error : '错误信息'}
  • 9.针对不同操作, 返回数据符合如下规范(这只是规范)
GET /books:返回资源对象的列表(数组)[{},{},{}]
GET /books/1:返回单个资源对象         {}
POST /books:返回新生成的资源对象     {新增的书}
PUT /books/1:返回完整的资源对象       {返回修改后的}
PATCH /books/1:返回完整的资源对象       {返回修改后的}
DELETE /books/1:返回一个空文档   
  • 10.返回结果中携带资源连接
{
    "name":"xxx 博客 ",
    "url":"https://www.cnblogs.com/songhaixing/"
}

三. 接口测试工具 : Postman 与 Appizza

1. 工具地址

ps : 接口测试工具不止这两种, 有很多:Postwoman ....

2.Postman 常用功能介绍

  • get 请求:

25 DRF 框架入门介绍

  • post 请求:

25 DRF 框架入门介绍

  • 导出请求结果, 导到一个文件里面

25 DRF 框架入门介绍

  • 导入请求文件

25 DRF 框架入门介绍

3.Apizza 界面

  • 中文显示, 功能上与 Postman 使用没有很大的差别

25 DRF 框架入门介绍

四.Django-RESTful 介绍与安装

1. 介绍

  • Django rest_framework, 简称 drf, 可以更方便的使用 django 写出符合 RESTful 规范的接口, (缩减编写 api 接口的代码)
  • Django REST framework 是一个建立在 Django 基础之上的 Web 应用开发框架(Django 的一个 app),可以快速的开发 REST API 接口应用
  • 在 REST framework 中,提供了序列化器 Serialzier 的定义,可以帮助我们简化序列化与反序列化的过程
  • 不仅如此,还提供丰富的类视图、扩展类、视图集来简化视图的编写工作
  • REST framework 还提供了认证、权限、限流、过滤、分页、接口文档等功能支持
  • REST framework 提供了一个 API 的 Web 可视化界面来方便查看测试接口

2. 安装与快速使用(csrf 禁用状态)

  • 安装 drf
pip3 install djangorestframework
  • settings.py 文件中添加 app
INSTALLED_APPS = ['rest_framework']
  • models.py 文件书写模型类
from django.db import models


class Book(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8,decimal_places=2)
    author = models.CharField(max_length=16)
    publish = models.CharField(max_length=16)
# 创建好模型类执行数据库迁移命令
  • serializers.py 新建一个序列化类(该文件自己创建)
from rest_framework.serializers import ModelSerializer
from drf_test import models


class BookSerializers(ModelSerializer):
    class Meta:
        model = models.Book  #  指明该序列化器处理的数据字段从模型类 Book 参考生成
        fields = "__all__"   # 指明该序列化器包含模型类中的哪些字段,’all‘指明包含所有字段
  • views.py 书写视图类
from django.shortcuts import render
from rest_framework.viewsets import ModelViewSet
from drf_test.serializers import BookSerializers
from drf_test import models


class BookView(ModelViewSet):
    serializer_class = BookSerializers  # 指明该视图在进行序列化或反序列化时使用的序列化器
    queryset = models.Book.objects.all()  # 指明该视图集在查询数据时使用的查询集
  • urls.py 书写路由关系
from django.contrib import admin
from django.urls import path
from rest_framework.routers import SimpleRouter
from drf_test import views


router = SimpleRouter()  # 用来处理视图的路由器
router.register('book',views.BookView)  # 在路由器中注册视图集
urlpatterns = [path('admin/', admin.site.urls),

]
urlpatterns += router.urls  # 将路由器中的所有路由信息拼接到 Django 中的路由列表中
  • 启动项目开始测试

期间遇到的一个问题 : OrderedDict‘object has no attribute‘register‘报错信息

  • 原因是 markdown 的版本不兼容导致的问题,可以将 markdown 的版本安装到 3.2.1,问题即得到解决

python
pip3 install markdown==3.2.1 -i https://pypi.tuna.tsinghua.edu.cn/simple

25 DRF 框架入门介绍

  • POST : 添加一本书籍信息

25 DRF 框架入门介绍

  • GET : 获取图书 (nid= 2 的书籍)

25 DRF 框架入门介绍

可以点击下面的输入框进行修改

  • 点击 DELETE 删除书籍 (nid=2)

25 DRF 框架入门介绍

正文完
 
shawn
版权声明:本站原创文章,由 shawn 2023-06-16发表,共计4407字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)